BFS宽度搜索(队列)与DFS深度搜索(递归)

1;应用方面
——————bfs宽度搜索用于寻找最优解;
——————dfs深度搜索用于遍历寻找解;

2;实现原理;

——bfs;利用队列;层次来搜索的;
这里写图片描述
解释一下图片;
第一层;–A;
第二层;–BCD;
第三层;–EF;
第四层;–GH;
第4层;–I;
因为他是按层搜索,就是说只要bfs搜索到结果那么一定是最优解;;
来个题目化的;将上图CI连接,求从A到I最短路径;依旧划分层次;第三层就会搜到I;也就是说bfs最先搜到的一定是最优 解;
模板;//结合上图理解代码;

Q={起点s}; 标记s为己访问;
    while (Q非空) {
        取Q队首元素u; u出队;
        所有与u相邻且未被访问的点进入队列;
        标记u为已访问;
    }
////////////////////////////////////////////////////////////
whlie (队列不空) {
    u = 对队首元素;
    首元素出队;
    for (所有与 u 邻接点 v)      //  u 的上 下 左 右 
          // if(v 的坐标在 row, col之内 
          //     并且 v 不是墙
          //     并且 v 未被遍历) 
           v 入队
} 

——dfs;利用运用堆栈,递归层次搜索,回溯来遍历全部;
这里写图片描述
解释一下图片;
利用回溯,一条道路走到底,然后返回上一级,继续进行搜索,直到搜索完毕;

模板;//结合上图理解代码;

void DFS( Point P ){
        for(所有P的邻接点K){
                if(K未被访问){
                         标记K;
                         DFS(K);
                         //有时候要清空之前的标记;
                }
        }
}
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值